package co.edu.usbcali.sap.presentation.backEndBeans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlSelectOneRadio;
import com.icesoft.faces.component.selectinputtext.SelectInputText;

import co.edu.usbcali.sap.modelo.LineaInvestigacion;
import co.edu.usbcali.sap.modelo.PalabraClave;
import co.edu.usbcali.sap.modelo.Persona;
import co.edu.usbcali.sap.modelo.Proyecto;
import co.edu.usbcali.sap.modelo.dto.PersonaDTO;
import co.edu.usbcali.sap.modelo.dto.ProyectoDTO;
import co.edu.usbcali.sap.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.sap.utilities.FacesUtils;

public class ProyectoListConsulta {

	private HtmlOutputText codigo;
	private HtmlOutputText nombre;
	private List<ProyectoDTO> proyectos = new ArrayList<ProyectoDTO>();
	private List<SelectItem> consultas = new ArrayList<SelectItem>();
	private List<Persona> persona = new ArrayList<Persona>();
	private List<LineaInvestigacion> lineaInvestigacions = new ArrayList<LineaInvestigacion>();
	private List<PalabraClave> palabraClaves = new ArrayList<PalabraClave>();
	private List<PersonaDTO> integrantes = new ArrayList<PersonaDTO>();
	private SelectInputText txtIntegrantes;
	private List<SelectItem> item = new ArrayList<SelectItem>();
	private String consulta;

	public void updateList(ValueChangeEvent event) throws Exception {
		try {
			if (consulta != null) {

				if (consulta.equals("Estudiante") || consulta.equals("Jurado")
						|| consulta.equals("Director")) {
					String strign = event.getNewValue().toString();
					System.out.println(event.getComponent().getId().toString());
					persona = BusinessDelegatorView
							.FindByPath(strign, consulta);
					if (persona != null) {
						item.clear();
						for (Persona personas : persona) {
							SelectItem item2 = new SelectItem(personas,
									personas.getPerNombre() + "-"
											+ personas.getPerCodigo());
							item.add(item2);
						}
					}
				} else if (consulta.equals("L&#237;nea de Investigaci&#243;n")) {
					String strign = event.getNewValue().toString();
					System.out.println(event.getComponent().getId().toString());
					lineaInvestigacions = BusinessDelegatorView
							.FindByPathLinea(strign);
					if (lineaInvestigacions != null) {
						item.clear();
						for (LineaInvestigacion liInvestigacion : lineaInvestigacions) {
							Persona persona = new Persona();
							persona.setPerCodigo(liInvestigacion.getLininCodigo());
							persona.setPerNombre(liInvestigacion.getLininNombre());
							SelectItem item2 = new SelectItem(persona,persona.getPerNombre() + "-"
											+ persona.getPerCodigo());
							item.add(item2);
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	public ProyectoListConsulta() {
		super();
		SelectItem item = new SelectItem("Estudiante", "Estudiante");
		consultas.add(item);
		item = new SelectItem("Jurado", "Jurado");
		consultas.add(item);
		item = new SelectItem("Director", "Director");
		consultas.add(item);
		item = new SelectItem("L&#237;nea de Investigaci&#243;n",
				"L&#237;nea de Investigaci&#243;n");
		consultas.add(item);
		item = new SelectItem("Palabra Clave", "Palabra Clave");
		consultas.add(item);

	}

	public String action_consultar() {
		if (consulta == null) {
			FacesUtils
					.addErrorMessage("Por Favor Seleccione un M&#233;todo de Consulta");
		} else {
			
			if (consulta.equals("Estudiante") || consulta.equals("Jurado")
					|| consulta.equals("Director")) {
				try{
				String perso[] = txtIntegrantes.getValue().toString()
				.split("-");
				proyectos.clear();
				  List<Proyecto> pro = BusinessDelegatorView.findProyectos(perso[1],consulta);
				  for (Proyecto proyecto: pro){
					  ProyectoDTO dto = new ProyectoDTO();
					  dto.setProCodigo(proyecto.getProCodigo()+"");
					  dto.setProFechafin(proyecto.getProFechafin());
					  dto.setProFechainicio(proyecto.getProFechainicio());
					  dto.setProNombre(proyecto.getProNombre());
					  dto.setEstCodigo_Estado(BusinessDelegatorView.getEstado(proyecto.getEstado().getEstCodigo()).getEstNombre()+"");
					  dto.setFasproCodigo_FaseProyecto(BusinessDelegatorView.getFaseProyecto(proyecto.getFaseProyecto().getFasproCodigo()).getFasproNombre()+"");
					  dto.setTipproCodigo_TipoProyecto(BusinessDelegatorView.getTipoProyecto(proyecto.getTipoProyecto().getTipproCodigo()).getTipproNombre()+"");
					  dto.setProyecto(proyecto);
					  dto.setConsulta(this);
					  proyectos.add(dto);
				  }
				}catch(Exception e){
					
				}
			}else if (consulta.equals("Jurado")){
				
			}
		}

		return "";
	}
    
	
	public List<ProyectoDTO> getProyectos() {
		return proyectos;
	}

	public void setProyectos(List<ProyectoDTO> proyectos) {
		this.proyectos = proyectos;
	}

	public List<SelectItem> getConsultas() {
		return consultas;
	}

	public void setConsultas(List<SelectItem> consultas) {
		this.consultas = consultas;
	}

	public String getConsulta() {
		return consulta;
	}

	public void setConsulta(String consulta) {
		this.consulta = consulta;
	}

	public List<Persona> getPersona() {
		return persona;
	}

	public void setPersona(List<Persona> persona) {
		this.persona = persona;
	}

	public List<PersonaDTO> getIntegrantes() {
		return integrantes;
	}

	public void setIntegrantes(List<PersonaDTO> integrantes) {
		this.integrantes = integrantes;
	}

	public SelectInputText getTxtIntegrantes() {
		return txtIntegrantes;
	}

	public void setTxtIntegrantes(SelectInputText txtIntegrantes) {
		this.txtIntegrantes = txtIntegrantes;
	}

	public List<SelectItem> getItem() {
		return item;
	}

	public void setItem(List<SelectItem> item) {
		this.item = item;
	}

	public HtmlOutputText getCodigo() {
		return codigo;
	}

	public void setCodigo(HtmlOutputText codigo) {
		this.codigo = codigo;
	}

	public HtmlOutputText getNombre() {
		return nombre;
	}

	public void setNombre(HtmlOutputText nombre) {
		this.nombre = nombre;
	}

	public List<LineaInvestigacion> getLineaInvestigacions() {
		return lineaInvestigacions;
	}

	public void setLineaInvestigacions(List<LineaInvestigacion> lineaInvestigacions) {
		this.lineaInvestigacions = lineaInvestigacions;
	}

	public List<PalabraClave> getPalabraClaves() {
		return palabraClaves;
	}

	public void setPalabraClaves(List<PalabraClave> palabraClaves) {
		this.palabraClaves = palabraClaves;
	}

}
